// 封装的方法放到uni全局对象
uni.utils = {
	toast(title = '数据加载失败', icon = 'none') {
		uni.showToast({
			title,
			icon,
			mask: true,
		})
	},
	modal(title, content, cancelText = '取消', confirmText = '确认') {
		return uni.showModal({
			title,
			content,
			cancelText,
			confirmText,
			confirmColor: '#16C2A3',
			cancelColor: '#848484',
		})
	},
}

export function debounce(func, waitTime) {
	let timer = null
	return function (event) {
		// clearTimeout 的作用是什么？是清除setTimeout 里面的代码块
		if (timer) clearTimeout(timer)
		timer = setTimeout(() => {
			func(event)
		}, waitTime)
	}
}

export function debounce2(func, waitTime) {
	let timer = null
	return function () {
		if (timer) clearTimeout(timer)
		timer = setTimeout(() => {
			func.apply(this, arguments)
		}, waitTime)
	}
}

// 时间戳节流
export function throttle(func, waitTime) {
	let handleTime = 0
	return function () {
		let now = Data.now()
		// 判断 如果当前时间 - 调用时的时间 大于 我们设置的时间waitTime，
		// 直白的说就是看现在使用方法的时间减去上次调用方法的时间有没有超过我们设置的那个时间
		// 如果超过了就正常调用，如果没有超过，那么证明不符合我们设置的时间内，那么不调用。
		if (now - handleTime > waitTime) {
			func.apply(this, arguments)
			handleTime = now
		}
	}
}
// 定时器节流
export function throttle2(func, waitTime) {
	let timer = null
	return function () {
		if (!timer) {
			timer = setTimeout(() => {
				timer = null
				func.apply(this, arguments)
			}, waitTime)
		}
	}
}
/*
https://blog.csdn.net/Zhuangvi/article/details/121589965
定时器版节流的写法不需要判断 timer 存在的情况清除定时器。
为什么？这是因为就算你清除了定时器，定时器的返回值还是有值，而且 clearTimeout 的作用是什么？是
清除setTimeout 里面的代码块，点击查看详情 。

为什么防抖那里可以加？这是因为防抖那里没有 if (!timer) 这层判断，没有这层判断的话，初次调用的时候
是没有清除定时器的，那么定时器里面的代码是会执行的，再次调用的时候，虽然 timer有值，并执行了 
clearTimeout(timer)，但是这个是清除了上次的定时器里面的代码块，这次的定时器里面的代码块仍是会执
行的，你不断频繁的调用，就会不停的清除上次的定时器，但是最后一次的定时器还是在运行，里面的代码块最
终还是会执行，所以也就实现了防抖的功能。

而这个定时器版节流代码的话，如果你加了 if(timer) clearTimeout(timer); 并且有这个判断 if (!timer) ，
那么在初次调用时，会执行定时器里面的代码，但是如果你快速点击（频繁的调用）的话，这个timer 是有值的，
就会执行 if(timer) clearTimeout(timer); 当你执行了 clearTimeout(timer)，也就把初次的定时器里面
的这两行代码 timer = null; func.apply(that, args) 清除了，也就是说这个timer 永远都是有值的，也
就是永远都不会进入if (!timer) 这个判断分支了，不进入这个判断分支也就不会重置 timer和执行需要节流的
函数了，这样失去了封装节流函数的意义了。
*/
